﻿#region Using

using System;

#endregion

namespace Commons.Extension
{
    /// <summary>
    /// Utilitários para enumeradores
    /// </summary>
    public static class EnumExtension
    {
        /// <summary>
        /// Converte um enum para um numero inteiro em BitWise.
        /// </summary>
        /// <remarks>
        /// O enum precisa ser composto por números exponenciais de 2, para fazer a operação em Bitwise.
        /// </remarks>         
        /// <param name="aEnum">Enum que será convertido</param>
        /// <example>
        /// <list type="bullet">
        /// <item>2^0 = 1 >> 0001</item>
        /// <item>2^1 = 2 >> 0010</item>
        /// <item>2^2 = 4 >> 0100</item>
        /// <item>2^3 = 8 >> 1000</item>
        /// </list>
        /// </example>
        /// <returns></returns>
        public static int ToBitwise<T>( this T[] aEnum )
        {
            if ( aEnum == null || aEnum.Length < 1 )
            {
                return 0;
            }

            int lValue = 0;

            foreach ( var lTextStyle in aEnum )
            {
                lValue |= Convert.ToInt32( lTextStyle );
            }

            return lValue;
        }
    }
}